package ar.maikoova.models;

import java.sql.Date;
import java.sql.SQLException;
import java.util.Vector;
import ar.maikoova.modelsControllers.CuotaController;
import ar.maikoova.modelsControllers.UnidadFuncionalController;

public class UnidadFuncional {
	
	private int idUnidadFuncional;
	private String codigo;
	private String codigoProyectoPadre; 
	private ClienteInversor inversorUnidadFuncional;
	private String formaPagoUnidadFuncional;
	private float estimadoUnidadFuncional;
	private float porcentajeUnidadFuncional;
	private int dimensionUnidadFuncional;
	private Date fechaAjusteInflacionario;
	private Vector<Cuota> coutas = new Vector<Cuota>(); 
	
	
	public UnidadFuncional(){	
		this.idUnidadFuncional=0;
		this.codigo="";
		this.codigoProyectoPadre=""; 
		this.inversorUnidadFuncional= new ClienteInversor();
		this.formaPagoUnidadFuncional="";
		this.estimadoUnidadFuncional=0;
		this.porcentajeUnidadFuncional=0;
		this.dimensionUnidadFuncional=0;
		this.fechaAjusteInflacionario = null;
		
	}
	
	public UnidadFuncional(int idUnidadFuncional,
			ClienteInversor inversorUnidadFuncional, String formaPagoUnidadFuncional, 
			float estimadoUnidadFuncional, float porcentajeUnidadFuncional,
			int dimensionUnidad, String codigo,String codigoProyectoPadre, Date fechaAjusteInflacionario) {
		
		this.idUnidadFuncional = idUnidadFuncional;
		this.codigo=codigo;
		this.codigoProyectoPadre=codigoProyectoPadre; 
		this.inversorUnidadFuncional = inversorUnidadFuncional;
		this.formaPagoUnidadFuncional=formaPagoUnidadFuncional;
		this.estimadoUnidadFuncional = estimadoUnidadFuncional;
		this.porcentajeUnidadFuncional = porcentajeUnidadFuncional;
		this.dimensionUnidadFuncional= dimensionUnidad;
		this.fechaAjusteInflacionario = fechaAjusteInflacionario;
	}
	
	public UnidadFuncional(UnidadFuncional nuevaUnidad) {
		
		this.idUnidadFuncional = nuevaUnidad.getIdUnidadFuncional();
		this.codigo=nuevaUnidad.getCodigo();
		this.codigoProyectoPadre=nuevaUnidad.getCodigoProyectoPadre();
		this.inversorUnidadFuncional = nuevaUnidad.getInversorUnidadFuncional();
		this.formaPagoUnidadFuncional=nuevaUnidad.getFormaPagoUnidadFuncional();
		this.estimadoUnidadFuncional = nuevaUnidad.getEstimadoUnidadFuncional();
		this.porcentajeUnidadFuncional = nuevaUnidad.getPorcentajeUnidadFuncional();
		this.dimensionUnidadFuncional = nuevaUnidad.getDimensionUnidadFuncional();
		this.fechaAjusteInflacionario = nuevaUnidad.getFechaAjusteInflacionario();
	}

	public int getIdUnidadFuncional() {
		return idUnidadFuncional;
	}

	public ClienteInversor getInversorUnidadFuncional() {
		return inversorUnidadFuncional;
	}

	public float getEstimadoUnidadFuncional() {
		return estimadoUnidadFuncional;
	}

	public float getPorcentajeUnidadFuncional() {
		return porcentajeUnidadFuncional;
	}


	public String getFormaPagoUnidadFuncional() {
		return formaPagoUnidadFuncional;
	}

	public int getDimensionUnidadFuncional() {
		return dimensionUnidadFuncional;
	}

	public void setFormaPagoUnidadFuncional(String formaPagoUnidadFuncional) {
		this.formaPagoUnidadFuncional = formaPagoUnidadFuncional;
	}

	public void setDimensionUnidadFuncional(int dimensionUnidadFuncional) {
		this.dimensionUnidadFuncional = dimensionUnidadFuncional;
	}

	public void setIdUnidadFuncional(int idUnidadFuncional) {
		this.idUnidadFuncional = idUnidadFuncional;
	}

	public void setInversorUnidadFuncional(ClienteInversor inversorUnidadFuncional) {
		this.inversorUnidadFuncional = inversorUnidadFuncional;
	}

	public void setEstimadoUnidadFuncional(float estimadoUnidadFuncional) {
		this.estimadoUnidadFuncional = estimadoUnidadFuncional;
	}

	public void setPorcentajeUnidadFuncional(float porcentajeUnidadFuncional) {
		this.porcentajeUnidadFuncional = porcentajeUnidadFuncional;
	}
	

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public void setFechaAjusteInflacionario(Date ajusteInflacionario){
		this.fechaAjusteInflacionario = ajusteInflacionario;
	}
	public Date getFechaAjusteInflacionario(){
		return this.fechaAjusteInflacionario;
	}
	
	
	public String getCodigoProyectoPadre() {
		return codigoProyectoPadre;
	}

	public void setCodigoProyectoPadre(String codigoProyectoPadre) {
		this.codigoProyectoPadre = codigoProyectoPadre;
	}

	public int insert() {
		UnidadFuncionalController uController = new UnidadFuncionalController();
		try {
			return uController.insert(this);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return -1;
	}
	public int update() {
		UnidadFuncionalController uController = new UnidadFuncionalController();
		try {
			return uController.update(this);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return -1;
	}
	public int delete() {
		UnidadFuncionalController uController = new UnidadFuncionalController();
		try {
			return uController.delete(this);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return -1;
	}
	
	
	// Aplica el ajuste a la unidad dada
	public Float aplicarAjusteInflacionario(String detalle, Integer idUnidad){
		UnidadFuncionalController uController = new UnidadFuncionalController();
		Float monto = (float)0;
		try{
			monto = uController.aplicarAjusteInflacionario(detalle,idUnidad);
			return monto;
		}catch(SQLException e){
			e.printStackTrace();
			return (float)-1;
		}
	}
	
	public Cuota getProximaCuota(UnidadFuncional u){
		CuotaController uController = new CuotaController();
		try{
			return uController.getProximaCuota(u);
			
		}catch(SQLException e){
			e.printStackTrace();
			return null;
		}		
	}
	
	public Vector<Cuota> getCuotasPagas(UnidadFuncional u){
		CuotaController uController = new CuotaController();
		try{
			return uController.getCuotasPagas(u);
			
		}catch(SQLException e){
			e.printStackTrace();
			return null;
		}		
	}	

	/* pruebas*/
	public static void main(String []args){
		UnidadFuncional u = new UnidadFuncional();
		u.setIdUnidadFuncional(1);
		//System.out.print(u.aplicarAjusteInflacionario("inflacion", 1));
//		Cuota c = u.getProximaCuota(u);
//		System.out.print(c.getMonto());
		Vector<Cuota> Cuotas = u.getCuotasPagas(u);
		if(!Cuotas.isEmpty()){
			Cuota c = u.getProximaCuota(u);
			c.setFechaPago(new Date(new java.util.Date().getTime()));
			if(c.pagarCuota(c).compareTo(0) == 0){
				System.out.print("pago monto cuota" + c.getMonto());
					
			}
						
		}	
		
		
	}
}
